#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
//判断素数
/*is_prime(int i)
{
	int flag = 0;
	for (int j = 2; j <= sqrt(i); j++)
	{
		if (i % j == 0)
		{
			flag = 1;
			break;
		}
	}
	return flag;
}
int main()
{
	int i;
	for (i = 100; i <= 200; i++)
	{
		int flag = is_prime(i);
		if (flag == 0)
		{
			printf("%d ", i);
		}
	}


	return 0;
}*/


//判断闰年
/*is_leap_year(int y)
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y & 400 == 0))
	{
	    return 0;
	}
	return 1;
}
int main()
{
	int y = 0;
	int flag = is_leap_year(y);
	scanf("%d", &y);
	if (flag == 1)
	{
		printf("%d是闰年", y);
	}
	else
	{
		printf("%d不是闰年", y);
	}
	return 0;
}*/


//创建一个整形数组，完成对数组的操作
//实现函数init() 初始化数组为全0
//实现print()  打印数组的每个元素
//实现reverse()  函数完成数组元素的逆置。
/*void init(int arr[10], int sz)
{
	for (int i = 0; i < sz; i++)
	{
		arr[i] = 0;
	}
}
void print(int arr[10], int sz)
{
	for (int i = 0; i < sz; i++)
	{
		printf("%-3d ",arr[i]);
	}
	printf("\n");
}
void reverse(int arr[10], int sz)
{
	for (int i = 0; i < sz/2; i++)
	{
		int temp = 0;
		temp = arr[i];
		arr[i] = arr[sz-1-i];
		arr[sz-1-i] = temp;
	}
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	print(arr, sz);//2
	reverse(arr, sz);//3
	print(arr, sz);//2
	init(arr,sz);//1
	print(arr, sz);//2
	return 0;
}*/


//乘法口诀表
void multiplication_table(int i, int j, int k, int m)
{
	for (i = 1;i <= m;i++)
	{
		for (j = 1;j <= i;j++)
		{
			k = i * j;
			printf(" %d %c %d = %d", i, '*', j, k);
		}
		printf("\n");
	}
}
int main()
{
	int i = 0;
	int j = 0;
	int k = 0;
	int m = 0;
	scanf("%d", &m);
	multiplication_table(i, j, k, m);
	return 0;
}